﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.Serialization;

namespace WebBlueMarble
{
    [DataContract]//원래는 통재로 전송하는 등의 방식을 고려했지만, 클라이언트의 컨트롤조작을 서버에서 할수있음
    public class User
    {
        int muindo = 0;//일단 무인도 체류는 0으로 만듬
        string id;//이름
        int money;//현금
        int position;//위치
        [DataMember]
        public Area Area
        {
            set;
            get;
        }
        public bool Enabled
        {
            set;
            get;
        }
        public User(string id)
        {
            this.id = id;
            position = 0;//첫출발지.
            Fortunes = new Dictionary<string, Estate>();
        }
        ICallback callback;//각 유저에 해당하는 콜백
        public ICallback Callback
        {
            get { return callback; }
            set { callback = value; }
        }
        [DataMember]
        public string Id
        {
            set { id = value; }
            get { return id; }
        }
        [DataMember]
        public int Money
        {
            set { money = value; }
            get { return money; }
        }
        public Dictionary<string, Estate> Fortunes//유저의 재산목록
        {
            set;
            get;
        }
        [DataMember]
        public int Position//위치
        {
            set { position = value; }
            get { return position; }
        }
        [DataMember]
        public int Muindo
        {
            get { return muindo; }
            set { muindo = value; }
        }
        /*    public bool BuyEstateLodging(Estate estate, Lodging lodging)
            {
                if (estate.Owner.id == id)
                {
                    LogMessage("땅주인:" + estate.Owner.id);
                    switch (lodging)
                    {
                        case Lodging.Inn:
                            if (estate.Inn == false)
                            {
                                estate.Inn = true;
                                money -= (int)Lodging.Inn;
                                return true;
                            }
                            else
                            {
                                LogMessage("이미 지어져 있습니다.");
                            }
                            break;
                        case Lodging.Condo:
                            if (estate.Condo == false)
                            {
                                estate.Condo = true;
                                money -= (int)Lodging.Condo;
                            }
                            else
                            {
                                LogMessage("이미 지어져 있습니다.");
                            }
                            break;
                        case Lodging.Hotel:
                            if (estate.Hotel == false)
                            {
                                estate.Hotel = true;
                                money -= (int)Lodging.Hotel;
                                return true;
                            }
                            else
                            {
                                LogMessage("이미 지어져 있습니다.");
                            }
                            break;
                    }
                    return false;
                }
                LogMessage("집주인이 아닙니다.");
                return false;
            }
            */
        public override string ToString()
        {
            return id;
        }
        public override bool Equals(object obj)
        {
            return id == (obj as User).id;
        }
        public override int GetHashCode()
        {
            return id.GetHashCode();
        }
        [Conditional("DEBUG")]
        private static void LogMessage(string message)
        {
            Console.Write(message);
            Console.CursorLeft = 40;
            Console.WriteLine(DateTime.Now);
        }
    }
}